package com.neuedu.hisboot.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.neuedu.hisboot.entity.Medicalrecord;
import com.neuedu.hisboot.mapper.MedicalrecordMapper;
import com.neuedu.hisboot.service.IMedicalrecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 *  电子病历服务实现类
 * </p>
 *
 * @author jaun
 * @since 2025-07-04
 */
@Service
public class MedicalrecordServiceImpl extends ServiceImpl<MedicalrecordMapper, Medicalrecord> implements IMedicalrecordService {

    @Override
    public Medicalrecord getByCaseNumber(String caseNumber) {
        QueryWrapper<Medicalrecord> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("caseNumber", caseNumber);
        return this.getOne(queryWrapper);
    }

    @Override
    public Medicalrecord getByRegistId(Integer registId) {
        QueryWrapper<Medicalrecord> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("registID", registId);
        return this.getOne(queryWrapper);
    }

    @Override
    public List<Medicalrecord> getByStatus(Integer status) {
        QueryWrapper<Medicalrecord> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("caseState", status);
        return this.list(queryWrapper);
    }

    @Override
    public boolean saveAsTemplate(Medicalrecord medicalrecord) {
        try {
            // 这里可以实现保存为模板的逻辑
            // 可以创建一个新的模板记录，或者将病历记录标记为模板
            // 具体实现可以根据业务需求调整
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    @Override
    public List<Medicalrecord> getByDoctorId(Integer doctorId) {
        // 需要通过挂号记录关联查询
        // 这里需要根据实际的数据库关联关系来实现
        QueryWrapper<Medicalrecord> queryWrapper = new QueryWrapper<>();
        // 假设通过registID关联到Register表，再关联到User表
        // 具体实现需要根据实际的数据库结构调整
        return this.list(queryWrapper);
    }

    @Override
    public List<Medicalrecord> getByPatientId(Integer patientId) {
        // 需要通过挂号记录关联查询
        // 这里需要根据实际的数据库关联关系来实现
        QueryWrapper<Medicalrecord> queryWrapper = new QueryWrapper<>();
        // 具体实现需要根据实际的数据库结构调整
        return this.list(queryWrapper);
    }

    @Override
    public Medicalrecord importTemplate(Integer medicalRecordId, Integer templateId) {
        try {
            // 获取病历记录
            Medicalrecord medicalRecord = this.getById(medicalRecordId);
            if (medicalRecord == null) {
                return null;
            }

            // 这里需要根据templateId获取模板信息，然后更新病历记录
            // 具体实现需要根据TemplateInfoService来实现
            // 暂时返回原病历记录
            return medicalRecord;
        } catch (Exception e) {
            return null;
        }
    }

    @Override
    public boolean exportTemplate(Integer medicalRecordId) {
        try {
            // 获取病历记录
            Medicalrecord medicalRecord = this.getById(medicalRecordId);
            if (medicalRecord == null) {
                return false;
            }

            // 这里需要将病历记录保存为模板
            // 具体实现需要根据TemplateInfoService来实现
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}
